import axios from 'axios';
import VueAxios from 'vue-axios';
import {getToken} from "/plugins/cookie";
import router from '../src/router/index'
import store from '../src/store/index'
import {ElMessage} from 'element-plus'

const setupAxios = (app) => {
    // VueAxios插件注册，将axios绑定到Vue实例
    app.use(VueAxios, axios)
}
// 设置默认值
axios.defaults.baseURL = "http://42.192.7.146:8000/api";
// axios.defaults.headers.common['Authorization']=getToken();
// axios.defaults.headers.common['Authorization']=getToken();

// 请求拦截器
axios.interceptors.request.use(function (config) {
    const token = getToken();
    
    // 调试日志，检查token是否正确获取
    if (token) {
        // 直接将token设置为Authorization头的值，不带Bearer前缀
        // 因为后端直接使用jwt.decode解码整个HTTP_AUTHORIZATION值
        config.headers.Authorization = token;
    }
    return config;
})

// 响应拦截器
axios.interceptors.response.use(function (response) {
    // 当token过期或者错误，采取响应拦截器来进行拦截。根据状态码进行判断
    // 200 成功
    return response;
},function (error) {
    // 401 代表错误 跳转到登录界面，同时清空cookie和status
    if(error.response.status === 401) {
        router.replace({name: 'login'});
        // 清空数据(在store中创建函数来执行)
        store.commit('logout')
        // 页面弹窗提示,从ElMessage中导入
        ElMessage.error('认证过期，请重新登录...')
    }
    return Promise.reject(error);
})


export {setupAxios, axios}